home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
GameKit
/
gamekit-1
/
GameInfo.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
9KB
|
298 lines
// GameInfo.m -- This object allows you to set global parameters that
// affect the GameKit in various ways.
#import <gamekit/gamekit.h>
#import <daymisckit/daymisckit.h>
#import <appkit/appkit.h>
@implementation GameInfo
- init // implement to generate an empty slot for server
{
int i;
[super init];
maxHighScores = 10; numHighScoreTables = 1; numSoundStreams = 1;
numSounds = GK_DEFNUMSOUNDS; numSoundTypes = GK_DEFNUMTYPES;
numOneUps = 3;
// this object assumes that this array is allocated. Don't use the
// object if it isn't or you'll get memory access exceptions (probably
// on address 0x0)
maxHighScoresPerPlayer = (int *)malloc(sizeof(int) *
2 * numHighScoreTables);
for (i=0; i<(numHighScoreTables * 2); i++) maxHighScoresPerPlayer[i] = 0;
slotType = [[DAYString alloc] initString:"HighScoreSlot"];
encryptedPassword = [[DAYString alloc] initString:"GK72ol87WD.CE"];
// the above password is "NONE". Override with your own.
return self;
}
- free
{ // free all the sub-objects.
[slotType free];
[encryptedPassword free];
if (maxHighScoresPerPlayer) free(maxHighScoresPerPlayer);
return self;
}
- dumpToLog:aLogFile // used by server when logging
{ // aLogFile must be a kind of the DAYLogFile class
char *string = (char *)malloc(256); int i;
id tempString = [[DAYString alloc] init];
sprintf(string, " numSounds = %d\n numSoundTypes = %d\n numSoundStreams = %d\n maxHighScores = %d\n numHighScoreTables = %d\n numOneUps = %d\n slotType = \"%s\"\n encryptedPassword = \"%s\"\n",
numSounds, numSoundTypes, numSoundStreams,
maxHighScores, numHighScoreTables, numOneUps,
[slotType stringValue], [encryptedPassword stringValue]);
[tempString setStringValue:string];
[aLogFile addLineToLogFile:tempString];
for (i=0; i<numHighScoreTables; i++) {
sprintf(string, " maxHighScoresPerPlayer for table %d (net = NO) = %d\n maxHighScoresPerPlayer for table %d (net = YES) = %d\n",
i, maxHighScoresPerPlayer[i*2],
i, maxHighScoresPerPlayer[i*2+1]);
[tempString setStringValue:string];
[aLogFile addLineToLogFile:tempString];
}
free(string);
[tempString free];
return self;
}
// The following methods access stored info.
- slotType // For the high score system
{
return slotType;
}
- (int)numOneUps // for the high score system
{
return numOneUps;
}
- (int)maxHighScores // for the high score system
{
return maxHighScores;
}
- (int)numHighScoreTables // for the high score system
{
return numHighScoreTables;
}
- encryptedPassword // For network high score table access
{
return encryptedPassword;
}
- (int)numSounds // for the sound system
{
return numSounds;
}
- (int)numSoundTypes // for the sound system
{
return numSoundTypes;
}
- (int)numSoundStreams // for the sound system
{
return numSoundStreams;
}
// The following methods change stored info. All return self.
- setnumSoundTypes:(int)anInt
{
numSoundTypes = anInt;
return self;
}
- setnumSoundStreams:(int)anInt
{
numSoundStreams = anInt;
return self;
}
- setnumSounds:(int)anInt
{
numSounds = anInt;
return self;
}
- setnumHighScoreTables:(int)anInt
{ // copy over the max scores per player and reallocate it to the right size
int i, *newMaxScores = (int *)malloc(sizeof(int) * 2 * anInt);
for (i=0; i<anInt; i++) { // return zero if out of range...
// if you compile with NOISYDEBUG, you'll see a mass of "errors"
// every time this array is enlarged. Ignore them; it's on purpose!
newMaxScores[i*2] = [self maxScoresPerPlayerTable:i net:0];
newMaxScores[i*2+1] = [self maxScoresPerPlayerTable:i net:1];
}
free(maxHighScoresPerPlayer);
maxHighScoresPerPlayer = newMaxScores;
numHighScoreTables = anInt;
return self;
}
- setMaxHighScores:(int)anInt
{
maxHighScores = anInt;
return self;
}
- setSlotType:(const char *)aString
{
[slotType setStringValue:aString];
return self;
}
- setEncryptedPassword:(const char *)aString
{
[encryptedPassword setStringValue:aString];
return self;
}
- setNumOneUps:(int)oneUps
{
numOneUps = oneUps;
return self;
}
- (int)maxScoresPerPlayerTable:(int)theTable net:(BOOL)which
{
if ((theTable >= numHighScoreTables) || (theTable < 0)) {
#ifdef NOISYDEBUG
fprintf(stderr,
"GameInfo: Table arg (%d) to -maxScoresPerPlayerTable:net: out of range.\n",
theTable);
#endif
return 0; // out of range
}
return maxHighScoresPerPlayer[theTable * 2 + (which ? 1 : 0)];
}
- setMaxScoresPerPlayerTable:(int)theTable net:(BOOL)which to:(int)val
{
if ((theTable >= numHighScoreTables) || (theTable < 0)) {
#ifdef NOISYDEBUG
fprintf(stderr,
"GameInfo: Table arg (%d) to -setMaxScoresPerPlayerTable:net:to: out of range.\n",
theTable);
#endif
return nil; // out of range
}
maxHighScoresPerPlayer[theTable * 2 + (which ? 1 : 0)] = val;
return self;
}
// for archiving to/from a file
- read:(NXTypedStream *)stream
{
int i;
[super read:stream];
NXReadTypes(stream, "iiiiii", &maxHighScores, &numHighScoreTables,
&numSounds, &numSoundTypes, &numSoundStreams, &numOneUps);
slotType = NXReadObject(stream);
encryptedPassword = NXReadObject(stream);
if (maxHighScoresPerPlayer) free(maxHighScoresPerPlayer);
maxHighScoresPerPlayer = (int *)malloc(sizeof(int) *
2 * numHighScoreTables);
for (i=0; i<(numHighScoreTables * 2); i++)
NXReadType(stream, "i", &maxHighScoresPerPlayer[i]);
#ifdef NOISYDEBUG
fprintf(stderr,
"GameInfo: -read:\n maxHighScores = %d\n", maxHighScores);
fprintf(stderr, " numHighScoreTables = %d\n", numHighScoreTables);
fprintf(stderr, " numSounds = %d\n", numSounds);
fprintf(stderr, " numSoundTypes = %d\n", numSoundTypes);
fprintf(stderr, " numSoundStreams = %d\n", numSoundStreams);
fprintf(stderr, " numOneUps = %d\n", numOneUps);
fprintf(stderr, " slotType = %s\n", [slotType stringValue]);
fprintf(stderr, " encryptedPassword = %s\n",
[encryptedPassword stringValue]);
for (i=0; i<(numHighScoreTables * 2); i++)
fprintf(stderr, " maxHighScoresPerPlayer[%d] = %d\n",
i, maxHighScoresPerPlayer[i]);
fprintf(stderr, "\n");
#endif
return self;
}
- write:(NXTypedStream *)stream
{
int i;
[super write:stream];
#ifdef NOISYDEBUG
fprintf(stderr,
"GameInfo: -write:\n maxHighScores = %d\n", maxHighScores);
fprintf(stderr, " numHighScoreTables = %d\n", numHighScoreTables);
fprintf(stderr, " numSounds = %d\n", numSounds);
fprintf(stderr, " numSoundTypes = %d\n", numSoundTypes);
fprintf(stderr, " numSoundStreams = %d\n", numSoundStreams);
fprintf(stderr, " numOneUps = %d\n", numOneUps);
fprintf(stderr, " slotType = %s\n", [slotType stringValue]);
fprintf(stderr, " encryptedPassword = %s\n",
[encryptedPassword stringValue]);
for (i=0; i<(numHighScoreTables * 2); i++)
fprintf(stderr, " maxHighScoresPerPlayer[%d] = %d\n",
i, maxHighScoresPerPlayer[i]);
fprintf(stderr, "\n");
#endif
NXWriteTypes(stream, "iiiiii", &maxHighScores, &numHighScoreTables,
&numSounds, &numSoundTypes, &numSoundStreams, &numOneUps);
NXWriteObject(stream, slotType);
NXWriteObject(stream, encryptedPassword);
for (i=0; i<(numHighScoreTables * 2); i++)
NXWriteType(stream, "i", &maxHighScoresPerPlayer[i]);
return self;
}
// NXTransport protocol implementation:
- encodeUsing:(id <NXEncoding>)portal
{
int i;
[portal encodeObjectBycopy:slotType];
[portal encodeObjectBycopy:encryptedPassword];
[portal encodeData:&maxHighScores ofType:"i"];
[portal encodeData:&numHighScoreTables ofType:"i"];
[portal encodeData:&numSounds ofType:"i"];
[portal encodeData:&numSoundTypes ofType:"i"];
[portal encodeData:&numSoundStreams ofType:"i"];
[portal encodeData:&numOneUps ofType:"i"];
for (i=0; i<(numHighScoreTables*2); i++)
[portal encodeData:&maxHighScoresPerPlayer[i] ofType:"i"];
return self;
}
- decodeUsing:(id <NXDecoding>)portal
{
int i;
slotType = [portal decodeObject];
encryptedPassword = [portal decodeObject];
[portal decodeData:&maxHighScores ofType:"i"];
[portal decodeData:&numHighScoreTables ofType:"i"];
[portal decodeData:&numSounds ofType:"i"];
[portal decodeData:&numSoundTypes ofType:"i"];
[portal decodeData:&numSoundStreams ofType:"i"];
[portal decodeData:&numOneUps ofType:"i"];
if (maxHighScoresPerPlayer) free(maxHighScoresPerPlayer);
maxHighScoresPerPlayer = (int *)malloc(sizeof(int) *
2 * numHighScoreTables);
for (i=0; i<(numHighScoreTables*2); i++)
[portal decodeData:&maxHighScoresPerPlayer[i] ofType:"i"];
return self;
}
- encodeRemotelyFor:(NXConnection *)connection
freeAfterEncoding:(BOOL *)flagp isBycopy:(BOOL)isByCopy
{
if (isByCopy) return self; //encode object (copy it)
// super will encode the proxy otherwise
return [super encodeRemotelyFor:connection
freeAfterEncoding:flagp isBycopy:isByCopy];
}
// Interface Builder support
- (const char *)getInspectorClassName { return "GameInfoInspector"; }
- (NXImage *)getIBImage { return [NXImage findImageNamed:"GameInfoObj"]; }
@end